package com.rede.didiok.common.dto.user;

import java.util.Date;
import java.util.List;

import lombok.Data;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.rede.didiok.common.dto.BaseDto;

/**
 * <p>
 * 管理员表 Dto
 * </p>
 *
 */
@Data
@ToString
public class UserDto extends BaseDto<UserDto> {

    /**
     * @TableField 配置需要填充的字段
     * 创建时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * 更新时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
    /**
     * 用户名
     */
    private String userName;

    /**
     * 密码
     */
    private String password;

    /**
     * 昵称
     */
    private String nickname;

    /**
     * 性别(1:男2:女)
     */
    private Integer gender;

    /**
     * 注册模式：1:正常情况下注册 2:小程序提交审核期间注册
     */
    private Integer registerMode;

    /**
     * 个人头像(UID)
     */
    private String avatar;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 出生年月日
     */
    private Date birthday;

    /**
     * 手机
     */
    private String mobile;

    /**
     * QQ号
     */
    private String qqNumber;

    /**
     * 微信号
     */
    private String weChat;

    /**
     * 职业
     */
    private String occupation;

    /**
     * 自我简介最多150字
     */
    private String summary;

    /**
     * 登录次数
     */
    private Integer loginCount;

    /**
     * 验证码
     */
    private String validCode;

    /**
     * 资料来源
     */
    private String source;

    /**
     * 平台uuid
     */
    private String socialUid;

    /**
     * 最后登录时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date lastLoginTime;

    /**
     * 最后登录IP
     */
    private String lastLoginIp;

    /**
     * 评论状态，0 禁言， 1 正常
     */
    private Integer commentStatus;

    /**
     * 开启邮件通知：  0：关闭， 1：开启
     */
    private Integer startEmailNotification;

    /**
     * 操作系统
     */
    private String os;

    /**
     * 浏览器
     */
    private String browser;

    /**
     * ip来源
     */
    private String ipSource;

    /**
     * 用户标签  0：普通， 1：博主， 2：官方， 3:机器人
     */
    private Integer userTag;

    /**
     * 是否通过加载校验【0 未通过，1 已通过】
     */
    private Integer loadingValid;

    /**
     * 用户积分【用于兑换物品】
     */
    private Integer credits;

    /**
     * 用户经验值【用户经验的获取逻辑和积分一致，但是不受积分扣除的影响】
     */
    private Integer expValue;

    /**
     * 用户背景图片uid
     */
    private String backgroundFileUid;

    /**
     * 编辑器模式，(0：富文本编辑器CKEditor，1：markdown编辑器Veditor)
     */
    private Integer editorModel;

    /**
     * 用户钱包金额【单位分】
     */
    private Long amount;

    // 以下字段不存入数据库

    /**
     * 用户头像
     */
    private String photoUrl;

    /**
     * 是否关注过该用户
     */
    private Boolean isWatchUser;

    /**
     * 博客发布数
     */
    private Integer rankMemberPublishCount;

    /**
     * 榜单成员评论发布数
     */
    private Integer memberCommentPublishCount;

    /**
     * 用户动态评论发布数
     */
    private Integer momentCommentPublishCount;

    /**
     * 博客访问数
     */
    private Integer rankMemberVisitCount;

    /**
     * 动态发表数
     */
    private Integer momentPublishCount;

    /**
     * 问题发布数
     */
    private Integer problemPublishCount;


    /**
     * 背景图片
     */
    private String backgroundFileUrl;

    /**
     * 点赞数
     */
    private Integer praiseCount;

    /**
     * 关注状态
     */
    private Integer userWatchStatus;

    /**
     * 关注人数
     */
    private Integer userWatchCount;

    /**
     * 粉丝数
     */
    private Integer userFollowCount;

    /**
     * 动态发布数
     */
    private Integer userMomentCount;

    /**
     * 用户收藏数
     */
    private Integer userCollectCount;

    /**
     * 用户勋章数
     */
    private Integer userMedalCount;

    /**
     * 用户权限Code，用来控制用户特权
     */
    private String authCodeList;

    /**
     * 用户获得的勋章列表
     */
//    private List<Medal> userMedalList;

    /**
     * 用户评论数
     */
    private Integer userCommentCount;

    /**
     * 用户等级
     */
    private Integer userLevel;

    /**
     * 用户ip属地
     */
    private String userIpPossession;

    /**
     * 用戶排名
     */
    private Integer rank;

    /**
     * 下一等级所需积分
     */
    private Integer levelMaxCredits;

    /**
     * 一周访问量
     */
    private Integer webVisitCountByWeek;

    /**
     * 一周点赞量
     */
    private Integer praiseCountByWeek;

    /**
     * 用户uid列表
     */
    private List<String> userUidList;


    /**
     * 是否刷新配置
     */
    private Boolean refresh;

    private Boolean isRememberMe;


    private String client;

    /**
     * 默认密码
     */
    private String defaultPassword;

    /**
     * 是否需要头像
     */
    private Boolean needAvatar;

    /**
     * 是否需要邮箱
     */
    private Boolean needEmail;

    public UserDto() {
        this.refresh = false;
    }
}
